From 488ea44a597063ecd9d1354bc01b1e165670a98d Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 27 Jan 2015 04:48:35 +0100 Subject: [PATCH] image: Use _gtk_css_style_property_get_mask_affecting() ... to avoid recomputing the cached surface all the time. --- gtk/gtkimage.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index 743cb8caae..5763f06915 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -29,6 +29,7 @@ #include #include "gtkcontainer.h" +#include "gtkcssstylepropertyprivate.h" #include "gtkiconhelperprivate.h" #include "gtkimageprivate.h" #include "deprecated/gtkiconfactory.h" @@ -1873,12 +1874,19 @@ icon_theme_changed (GtkImage *image) static void gtk_image_style_updated (GtkWidget *widget) { + static GtkBitmask *affects_icon = NULL; GtkImage *image = GTK_IMAGE (widget); GtkImagePrivate *priv = image->priv; + const GtkBitmask *changes; GTK_WIDGET_CLASS (gtk_image_parent_class)->style_updated (widget); - icon_theme_changed (image); + if (G_UNLIKELY (affects_icon == NULL)) + affects_icon = _gtk_css_style_property_get_mask_affecting (GTK_CSS_AFFECTS_ICON); + + changes = _gtk_style_context_get_changes (gtk_widget_get_style_context (widget)); + if (changes == NULL || _gtk_bitmask_intersects (changes, affects_icon)) + icon_theme_changed (image); priv->baseline_align = 0.0; } -- 2.30.2